cmake_minimum_required(VERSION 3.20)

project(tetris)

set(CMAKE_CXX_STANDARD 14)

#使用CMake的FetchContent模块来下载、解压和配置raylib库
# 当你设置DOWNLOAD_EXTRACT_TIMESTAMP TRUE时，CMake会尝试为每个下载的内容生成一个基于其下载时间戳的唯一标识符。
# 这个标识符用于确定内容是否已经被下载和提取过，从而避免不必要的重复下载。
# 如果内容已经存在并且时间戳没有变化，CMake将直接使用缓存的内容，而不是重新下载。
include(FetchContent)
FetchContent_Declare(raylib URL https://github.com/raysan5/raylib/archive/refs/tags/5.0.zip DOWNLOAD_EXTRACT_TIMESTAMP TRUE)
FetchContent_MakeAvailable(raylib)

find_package(raylib)

add_executable(tetris)

target_sources(tetris 
PRIVATE 
    src/main.cpp
    src/Tetris.cpp
    src/Color.cpp
    src/Position.cpp
    src/Block.cpp
    src/Grid.cpp
    src/Game.cpp

    include/Tetris.hpp
    include/Color.hpp
    include/Position.hpp
    include/Block.hpp
    include/Blocks.hpp
    include/Grid.hpp
    include/Game.hpp
)#指定构建tetris可执行文件所需的源文件

#为tetris目标添加包含目录，意味着这个目录对于编译tetris目标的所有源文件都是可见的
target_include_directories(tetris PUBLIC ${CMAKE_CURRENT_LIST_DIR}/src/)

target_link_libraries(tetris raylib)

#add_custom_command命令，用于位目标(target)添加自定义命令或者操作
add_custom_command(TARGET tetris POST_BUILD #TARGET用来指定自定义命令关联的目标，这里自定义命令关联tetris POST_BUILD表示在目标构建完成后执行
COMMAND ${CMAKE_COMMAND} -E copy_directory #COMMAND指定要执行的命令 CMAKE_COMMAND是CMake的命令行工具路径 -E copy_directory是cmake下的一个目录，用于复制目录 
${CMAKE_SOURCE_DIR}/fonts $<TARGET_FILE_DIR:tetris>/fonts) #${CMAKE_SOURCE_DIR}表示源目录 $<TARGET_FILE_DIR:tetris>表示可执行文件tetris的目录 表示从源目录复制到目标目录

add_custom_command(TARGET tetris POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/sounds $<TARGET_FILE_DIR:tetris>/sounds)

